#include "interface.h"
#include "Image_Download_Itrfc.h"
#include "VMImage_Get_Itrfc.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>

/* 函数功能：点击按钮“下载”的动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人：匡波 马小艳
 * 更新历史：暂无
 */
gint on_ImageDload_clicked(GtkWidget *widegt, gpointer data)
{
    GtkWidget *entry_saveaddr = NULL;
    
    const gchar *saveaddr = NULL;

    /* 获取文本输入框控件 */
    entry_saveaddr = glade_xml_get_widget(windowImageDwLoad, "entry1"); 
    
    /* 获取用户输入内容 */
    saveaddr = gtk_entry_get_text(GTK_ENTRY(entry_saveaddr));
    
    /* 用户输入为空 */
    if ((strlen(saveaddr) == 0))
    {
        showDialog(NULL,
                   GTK_DIALOG_DESTROY_WITH_PARENT,
                   GTK_MESSAGE_ERROR,
                   GTK_BUTTONS_CLOSE,
                   "请填写镜像保存地址!" );
 
	    return FAILURE;
    }
	
	/* 设置进度条 */
    pbar = glade_xml_get_widget(windowImageDwLoad, "progressbar1");
        
    gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(pbar), GTK_PROGRESS_LEFT_TO_RIGHT);
   
    if (ACTIVITY_MODE) 
        gtk_progress_bar_pulse (GTK_PROGRESS_BAR (pbar));
     
	gtk_timeout_add(100, progress_timeout, pbar); 
	
    /* TODO 下载镜像 */

    return SUCCESS;

}

/* 函数功能：点击按钮“返回”的动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人：匡波 马小艳
 * 更新历史：暂无
 */
gint on_Back_clicked(GtkWidget *widegt, gpointer data)
{
      /* 关闭窗口 */
     GtkWidget *win = NULL;
     
     win = glade_xml_get_widget(windowImageDwLoad, "window1");
     gtk_widget_destroy( win );
     
     pbar = NULL;

     gtk_main_quit();
	
     return SUCCESS;
}

/* 函数功能：点击按钮“浏览”的动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值 ：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人 ：匡波 马小艳
 * 更新历史：暂无
 */
gint on_Browse_clicked(GtkWidget *widegt, gpointer data)
{

    GtkWidget *dialog = NULL;
    GtkWidget *entry_saveaddr = NULL;
    GtkWidget *text_view = NULL;
    GtkTextBuffer *text_buffer = NULL;
   
    gchar *foldername = NULL;
    gchar *filename = NULL;
    
    /* 获取用户输入框 */
    entry_saveaddr = glade_xml_get_widget(windowImageDwLoad, "entry1");

    /* 获取文本显示框控件，及字符缓冲区指针 */
    text_view = glade_xml_get_widget(windowImageDwLoad, "ImageDLText");
    text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));    

    /* 弹出文件保存对话框，选择保存路径保存文件 */   	
    dialog = gtk_file_chooser_dialog_new ("Save File",
				                           NULL,
				                           GTK_FILE_CHOOSER_ACTION_SAVE,
				                           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
				                           GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
				                           NULL);

    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
    {

        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));

#ifdef DEBUG
        g_print("filename :%s ", filename);
#endif

        foldername  = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER (dialog));
        gtk_entry_set_text(GTK_ENTRY(entry_saveaddr), foldername);

    }

    /* 关闭文件保存对话框 */
    gtk_widget_destroy (dialog);

    /* 在文本显示区显示文件保存路径 */
    gtk_text_buffer_insert_at_cursor(text_buffer, "文件将保存为：", -1);
    gtk_text_buffer_insert_at_cursor(text_buffer, filename, -1);
    gtk_text_buffer_insert_at_cursor(text_buffer, "\n", -1);

	return SUCCESS;
	
}

/* 函数功能：点击按钮“取消”的动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值 ：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人 ：匡波 马小艳
 * 更新历史：暂无
 */
gint on_ImageCancel_clicked(GtkWidget *widegt, gpointer data)
{
     /* 关闭窗口 */
     GtkWidget *win = NULL;
     
     win = glade_xml_get_widget(windowImageDwLoad, "window1");
     gtk_widget_destroy( win );
     
     pbar = NULL;

     gtk_main_quit();
	
     return SUCCESS;
}

/* 函数功能：更新进度条显示的百分比
 * 入口参数：
 * 出口参数：无
 * 返 回 值 ：int
           TRUE 返回TRUE,函数可以继续调用
 * 创建日期：2009年7月8号
 * 创 建 人 ：马小艳
 * 更新历史：暂无
 */
gint progress_timeout(gpointer data)
{
	gdouble new_val;
	
	if(data == NULL)
	    return FALSE;
	   
    new_val = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (data)) + 0.01;
      
    if (new_val >= 1.0)
	    return FALSE;
      
    gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (data), new_val);
      
    /* 这是一个timeout函数，返回 TRUE，这样它就能够继续被调用 */
    return TRUE;
} 
